/* 
 * Authors: Edouard Eynard
 *          Jolan Houvenaeghel
 *          Tanguy Falconnet
 *
 * Date :	11/03/2014
 *
 * Description: Fichier d'entete des différentes fonctions.
 *
*/
#ifndef _FONCT_
#define _FONCT_

#define TAILLE_MAX 1000
#define PERSON 0
#define DAD 1
#define MUM 2

typedef struct Person Person;
struct Person{
	char *name;
	Person *dad;
	Person *mum;
};

Person ** tabPerson;
int sizeTab;

/*

  Description :			Recherche de boucles dans un arbre généalogique (irrégularités)
  Entrée - Sortie :		None
  Entrée : 			None
  Sortie : 				0 si correct / -1 si incorrect

*/
int isThereLoops();

/*

  Description :			Parcours d'arbre généalogique récursivement
  Entrée - Sortie :		tabPerson - Tableau contenant les personnes 
  Entrée : 				tab - tableau de noms de personnes déjà inspectée par la fonction
  size - taille de tab
  index - index de la personne à inspecter dans tabPerson
  Sortie : 				0 si correct / -1 si incorrect

*/
int recursive(char **tab, int size, int index);

/*

  Description :			Donne l'index d'une personne
  Entrée - Sortie :		tabPerson - Tableau contenant les personnes 
  Entrée : 				name - Nom de la personne à trouver
  Sortie : 				index de la personne / -1 si non trouvé

*/
int indexOf(char * name);

int equal(char *c1, char* c2);

/*

  Description :			Extrait les noms d'une ligne séparés par ";"
  Entrée - Sortie :		
  Entrée : 				line - ligne d'où on extrait les noms
  Sortie : 				tableau de noms

*/
char** splitLine(char* line);

/*

  Description :			Affiche une chaine de caractères
  Entrée - Sortie :		
  Entrée : 				string - chaine de caractères à afficher
  Sortie : 				

*/
void displayString(char * string);

/*

  Description :			Pour le debug
  Entrée - Sortie :		
  Entrée : 				line - numéro de ligne
  Sortie : 				

*/
void debug(int line);

/*

  Description :  	Fonction de lecture du fichier de score
  Remplie le nombre de parties perdues par chaque joueur
  Entrée - Sortie : 
  Entrée : 
  Sortie :

*/
void createTree();

/*

  Description :			Fonction d'ajout d'une personne
  Entrée - Sortie :		none
  Entrée : 			name : nom de la personne
  Sortie : 				0 si correct / -1 si incorrect

*/
int addPerson(char * name);

/*

  Description :			Fonction d'ajout des parents
  Entrée - Sortie :		none
  Entrée : 			index : index de la personne a laquelle on ajoute les parents
                                        dad : le pere
					mum : la mere
  Sortie : 				0 si correct / -1 si incorrect

*/
int addParents(int index, Person *dad, Person *mum);

/*

  Description :			Fonction d'affichage de l'arbre
  Entrée - Sortie :		none
  Entrée : 			none
  Sortie : 				none

*/
void displayTree();

/*

  Description :			Initialisation de l'environnement
  Entrée - Sortie :		none
  Entrée : 			none
  Sortie : 				none

*/
void init();

#endif
